import { Request, Response } from 'express'
import friendServer from '../../service/friendService'
import adminServer from '../../service/adminService';
import teacherServer from '../../service/teacherService';
import studentServer from '../../service/studentService';
import messageServer from '../../service/messageService';

class FriendController {
  // 根据 用户 id，获取好友列表
  async findFriendsByUid(req: Request, res: Response) {
    const { uid } = req.params
    // 0. 获取好友列表
    const friends = await friendServer.findByUid(uid)
    const friendList = []
    // 1. 根据好友id查找对应好友信息
    for (let i = 0; i < friends.length; i++) {
      let fInfo = null
      if (friends[i].frole === 0) {
        fInfo = await adminServer.findById(friends[i].fid)
      } else if (friends[i].frole === 1) {
        fInfo = await teacherServer.findById(friends[i].fid)
      } else {
        fInfo = await studentServer.findById(friends[i].fid)
      }
      if (fInfo) {
        delete fInfo.password
        // 2. 查找用户与好友的最后一条信息
        let lastMsg = await messageServer.findLastMsg(uid, friends[i].fid)
        // 3. 查找好友的未读数量
        let unReadMsg = await messageServer.findUnReadMsgs(uid, friends[i].fid)
        // 最后：将最后一条信息的内容，时间，和未读数量添加到好友对象上
        fInfo.lastMsg = lastMsg?.content
        fInfo.lastTime = lastMsg?.time
        fInfo.unReadCount = unReadMsg[1]
        friendList.push(fInfo)  // push进新数组中
      }
    }
    res.gsmd(friendList)
  }

  // 添加好友
  async addFriend(req: Request, res: Response) {
    const form = req.body
    // 先查找好友是否在好友列表中
    const findRes = await friendServer.findByUidAndFid(form.uid, form.fid)
    if (findRes) return res.gem('该好友已在会话列表中')
    // 你保存好友数据，（你将对方加入好友）
    const fdata = {
      uid: form.uid,
      fid: form.fid,
      frole: parseInt(form.frole)
    }
    const saveRes = await friendServer.save(fdata)

    // 判断对方是否有你这个好友，没有再添加你为好友（防止你删了对方，再次添加对方时，对方又添加你为好友的情况）
    const fres = await friendServer.findByUidAndFid(form.fid, form.uid)
    if (!fres) {
      // 好友保存你的数据，（对方将你加入好友）
      friendServer.save({
        uid: form.fid,
        fid: form.uid,
        frole: parseInt(form.urole)
      })
    }

    if (saveRes) {
      res.gsm('将好友加入会话成功')
    }
  }

  // 移除好友
  async removeFriend(req: Request, res: Response) {
    const { uid, fid } = req.query
    const removeRes = await friendServer.remove(uid, fid)
    if (removeRes.deletedCount > 0) {
      res.gsm('移出会话成功')
    } else {
      res.gem('没有该好友')
    }
  }
}

export default new FriendController()
